﻿#region

using System;
using System.Windows.Forms;
using Obsluga.Gui;
using APP_PGM.DB;
using APP_PGM.POCZTA;
using WMAAN.Poczta;
using WMAAN.Uzytki;
using WMAAN.Uzytki.Kryptografia;
using WMAAN.Wyliczenia;

#endregion

namespace WMAAN.Gui.Formularze.Logowanie
{
    public partial class FormResetHasla : Form
    {
        private int idUzytkownika;

        public FormResetHasla()
        {
            InitializeComponent();
        }

        public bool init(string nazwaUzytkownika)
        {
            PGM baza = PGM.Instancja();
            DataSet_PGM.uzytkownicyRow[] uzytkownicyRow = (DataSet_PGM.uzytkownicyRow[]) baza.dane.uzytkownicy.Select(
                string.Format("login = '{0}' AND zablokowany = 0", nazwaUzytkownika));
            if (uzytkownicyRow.Length == 0)
            {
                Komunikaty.pokazBlad(string.Format("Uzytkownik o nazwie '{0}' nie istnieje w systemie", nazwaUzytkownika));
                return false;
            }

            idUzytkownika = uzytkownicyRow[0].id_uzytkownicy;

            if (uzytkownicyRow[0].pytania_uzytkownikaRow == null)
            {
                Komunikaty.pokazBlad(
                    "Nie można zresetować hasła dla wybranego użytkownika, ponieważ nie zostało\nwykonane pierwsze logowanie. Proszę się najpierw zalogować wykorzystując hasło przesłane mailem.\n\n W przypadku napotkania problemów proszę się skontaktować z administratorem systemu.");
                return false;
            }

            txtLogin.Text = uzytkownicyRow[0].login;
            txtEmail.Text = uzytkownicyRow[0].email;
            txtPytanie.Text = uzytkownicyRow[0].pytania_uzytkownikaRow.tresc;
            return true;
        }

        private void btnResetuj_Click(object sender, EventArgs e)
        {
            WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtOdpowiedz, "Proszę wpisać odpowiedź",
                                               TypWalidacjiDanych.BRAK_TEKSTU);

            WalidacjaDanychWejsciowych.Wykonaj(prvObslugaBledow, txtEmail, "Proszę wpisać adres email",
                                               TypWalidacjiDanych.BRAK_TEKSTU);

            if (!string.IsNullOrEmpty(prvObslugaBledow.GetError(txtOdpowiedz))
                &&
                !string.IsNullOrEmpty(prvObslugaBledow.GetError(txtEmail)))
            {
                return;
            }


            PGM pgm = PGM.Instancja();

            DataSet_PGM.uzytkownicyRow[] uzytkownicyRow =
                (DataSet_PGM.uzytkownicyRow[])
                pgm.dane.uzytkownicy.Select(string.Format("id_uzytkownicy = {0}", idUzytkownika));

            if (uzytkownicyRow.Length == 0)
            {
                Komunikaty.pokazBlad("Użytkownik nie istnieje. Mógł zostać usunięty");
                return;
            }

            if (txtOdpowiedz.Text.ToLower().Trim() != uzytkownicyRow[0].odpowiedz.ToLower().Trim())
            {
                Komunikaty.pokazBlad("Niepoprawna odpowiedź na pytanie weryfikacyjne");
                txtOdpowiedz.Text = string.Empty;
                return;
            }

            string noweHaslo = GeneratorHasel.Stworz(20, 20);

            uzytkownicyRow[0].haslo = noweHaslo.Szyfruj();

            var wiadomosc = Wiadomosci.ZresetowanoHaslo(uzytkownicyRow[0]);
            KlientPoczty klient = new KlientPoczty(Wiadomosci.SerwerPoczty);
            if (klient.Wyslij(wiadomosc))
            {
                DialogResult = DialogResult.OK;
            }
            else
            {
                DialogResult = DialogResult.Cancel;
            }
            Close();
        }

        private void btnAnuluj_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;

            Close();
        }
    }
}